/*
instanceof测试是否prototype一个构造函数的性质在对象的原型链中的任何地方出现。
constructor.prototype在object的原型链。
 */

// 思路：右边变量的原型存在于左边变量的原型链上

function defInstanceOf(left,right){
    let leftValue = left.__proto__
    let rightValue = right.prototype
    while(true){
        //当到达L原型链顶端还未匹配，返回false
        if(leftValue === null){
            return false
        }
        if(leftValue === rightValue){
            return true
        }
        leftValue = leftValue.__proto__
    }
}


function Foo(){}
const foo = new Foo()
console.log(foo instanceof  Foo) // true


//测试 defInstanceOf
console.log(defInstanceOf(foo,Foo)) // true
console.log(defInstanceOf(Foo,foo)) // false

console.log(defInstanceOf(foo,Object)) // true
console.log(defInstanceOf(foo,Function)) // false
console.log(defInstanceOf(Foo,Function)) // true

console.log(defInstanceOf({},Object)) // true
console.log(defInstanceOf([],Object)) // true